package main

import (
	"crypto/hmac"
	"crypto/sha1"
	"fmt"
)

func main() {
	src := []byte("love you three thousand times")	// 明文
	key := []byte("just a joke")	// 秘钥
	// 生成散列值（消息认证码）
	hamc1 := GenerateHamc(src,key)
	// 验证消息认证码
	res := VerifyHamc(src,key,hamc1)
	fmt.Println(res)
}

// 生成消息认证码
func GenerateHamc(plainText,key []byte) []byte {
	// 1 创建hash接口对象，需要指定使用的hash算法和秘钥
	myhash := hmac.New(sha1.New,key)

	// 2 给hash接口添加数据
	myhash.Write(plainText)

	// 3 计算出散列值
	hashText := myhash.Sum(nil)

	return hashText
}

// 验证消息认证码
func VerifyHamc(plainText,key,hashText []byte) bool {
	// 1 创建hash接口对象，指定hash算法和秘钥
	myhash := hmac.New(sha1.New,key)

	// 2 给hash接口对象添加数据
	myhash.Write(plainText)

	// 3 计算散列值
	hamc2 := myhash.Sum(nil)

	// 4 两个散列值比较
	return hmac.Equal(hashText,hamc2)
}